iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Odoo

利用【AI】工具,聰明進行 Odoo 程式開發系列 第 28

Day28:個案二:投資管理系統(8)-股票觀察清單,透LINE發送提醒通知

  • 分享至 

  • xImage
  •  

使用者故事

9. **作為一名投資者,我希望能用LINE 寄出觀察名單中股票的買入賣出及預測走勢,以便更快速地做出投資決策。**

Cursor回應

  1. 建立 LINE Messaging API 整合:

    • 註冊 LINE Developer 帳號並創建一個 LINE Bot
    • 獲取 Channel Access Token 和 Channel Secret
    • 在 Odoo 中創建一個新的模組來處理 LINE 消息發送
  2. 創建新的模型和方法:

    • 創建一個新的模型 line.notification.settings 來存儲 LINE Bot 的配置信息
    • stock.watchlist 模型中添加一個方法來生成每日通知消息
  3. 實現消息生成邏輯:

    • 遍歷所有觀察名單中的股票
    • 獲取每支股票的買入賣出建議和預測走勢
    • 將信息整合成一條格式化的消息
  4. 實現 LINE 消息發送功能:

    • 使用 Python 的 requests 庫來發送 HTTP POST 請求到 LINE Messaging API
    • 將生成的消息內容作為請求的 payload
  5. 創建定時任務:

    • 使用 Odoo 的 ir.cron 來創建一個每日執行的定時任務
    • 該任務會調用消息生成和發送的方法

重點程式碼

好的,我會根據之前的邏輯思考為您生成相關的程式碼。我們將分步驟實現這個功能。

首先,讓我們創建一個新的模型來存儲 LINE Bot 的配置信息:

class LineNotificationSettings(models.Model):
    _name = 'line.notification.settings'
    _description = 'LINE 通知設置'

    name = fields.Char('名稱', required=True)
    channel_access_token = fields.Char('Channel Access Token', required=True)
    channel_secret = fields.Char('Channel Secret', required=True)
    user_id = fields.Char('LINE 用戶 ID', required=True)
    is_active = fields.Boolean('啟用', default=True)

    @api.model
    def get_active_settings(self):
        settings = self.search([('is_active', '=', True)], limit=1)
        if not settings:
            raise UserError('沒有找到活躍的 LINE 通知設置。請先設置。')
        return settings

接下來,我們在 stock.watchlist 模型中添加生成每日通知消息的方法:


    def generate_daily_notification(self):
        settings = self.env['line.notification.settings'].get_active_settings()
        message = self._prepare_notification_message()
        self._send_line_message(settings, message)

    def _prepare_notification_message(self):
        message = "每日股票觀察名單更新:\n\n"
        for stock in self.search([]):
            advice = stock.advice_ids.filtered(lambda a: a.date == fields.Date.today())
            prediction = stock.prediction_ids.filtered(lambda p: p.date == fields.Date.today())
            
            message += f"股票: {stock.name} ({stock.stock_code})\n"
            if advice:
                message += f"建議: {advice.advice_type} - {advice.reason}\n"
            if prediction:
                message += f"預測: {prediction.prediction_type} (信心度: {prediction.confidence}%)\n"
            message += "\n"
        
        return message

    def _send_line_message(self, settings, message):
        url = 'https://api.line.me/v2/bot/message/push'
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {settings.channel_access_token}'
        }
        data = {
            'to': settings.user_id,
            'messages': [{'type': 'text', 'text': message}]
        }
        response = requests.post(url, headers=headers, data=json.dumps(data))
        if response.status_code != 200:
            raise UserError(f'發送 LINE 消息失敗: {response.text}')

現在,我們需要創建一個定時任務來每日執行這個通知:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="1">
        <record id="ir_cron_send_daily_stock_notification" model="ir.cron">
            <field name="name">發送每日股票通知</field>
            <field name="model_id" ref="model_stock_watchlist"/>
            <field name="state">code</field>
            <field name="code">model.generate_daily_notification()</field>
            <field name="interval_number">1</field>
            <field name="interval_type">days</field>
            <field name="numbercall">-1</field>
            <field name="doall" eval="False"/>
            <field name="nextcall" eval="(datetime.now() + timedelta(days=1)).replace(hour=8, minute=0, second=0)"/>
        </record>
    </data>
</odoo>

本章小結

透過 LINE Messaging API 接收他們股票觀察名單中的買入賣出建議和預測走勢,從而更快速地做出投資決策。我們首先創建了一個新的模型 line.notification.settings,用於存儲 LINE Bot 的配置信息,如 Channel Access Token、Channel Secret 和使用者的 LINE ID。這確保了系統能夠安全且有效地與 LINE API 進行通信。

接著,我們在 stock.watchlist 模型中添加了生成每日通知消息的方法。這些方法包括:

  1. generate_daily_notification:負責整合消息並調用發送功能。
  2. _prepare_notification_message:遍歷觀察名單中的所有股票,收集當日的買入賣出建議和預測走勢,並將這些信息格式化為一條可讀性強的消息。
  3. _send_line_message:使用 Python 的 requests 庫,將生成的消息透過 LINE API 發送給使用者。

為了自動化這一流程,我們使用 Odoo 的 ir.cron 模型創建了一個定時任務。這個任務設定為每日執行,會在指定的時間點(例如每天早上8點)自動調用 generate_daily_notification 方法,確保投資者能及時收到最新的股票信息。


上一篇
Day27:個案二:投資管理系統(7)-股票觀察清單,透過機器學習預測股市漲跌
下一篇
Day29:個案二:投資管理系統(9)-依股票觀察清單,篩選相關新聞和公告,使用(NLP)技術進行文本分析
系列文
利用【AI】工具,聰明進行 Odoo 程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言